using System;

namespace NBitcoin.Altcoins.HashX11.Crypto.SHA3
{
    internal class Keccak224 : Keccak
    {
        public Keccak224()
            : base(NBitcoin.Altcoins.HashX11.HashSize.HashSize224)
        {
        }
    }

    internal class Keccak256 : Keccak
    {
        public Keccak256()
            : base(NBitcoin.Altcoins.HashX11.HashSize.HashSize256)
        {
        }
    }

    internal class Keccak384 : Keccak
    {
        public Keccak384()
            : base(NBitcoin.Altcoins.HashX11.HashSize.HashSize384)
        {
        }
    }

    internal class Keccak512 : Keccak
    {
        public Keccak512()
            : base(NBitcoin.Altcoins.HashX11.HashSize.HashSize512)
        {
        }
    }

    internal abstract class Keccak : BlockHash, ICryptoNotBuildIn
    {
        private readonly ulong[] m_state = new ulong[25];

        public Keccak(NBitcoin.Altcoins.HashX11.HashSize a_hash_size)
            : base((int)a_hash_size, 200 - ((int)a_hash_size * 2))
        {
            Initialize();
        }

        protected override void TransformBlock(byte[] a_data, int a_index)
        {
            ulong[] data = Converters.ConvertBytesToULongs(a_data, a_index, BlockSize);

            for (int j = 0; j<BlockSize / 8; j++)
                m_state[j] ^= data[j];

            ulong Aba, Abe, Abi, Abo, Abu;
            ulong Aga, Age, Agi, Ago, Agu;
            ulong Aka, Ake, Aki, Ako, Aku;
            ulong Ama, Ame, Ami, Amo, Amu;
            ulong Asa, Ase, Asi, Aso, Asu;
            ulong Bba, Bbe, Bbi, Bbo, Bbu;
            ulong Bga, Bge, Bgi, Bgo, Bgu;
            ulong Bka, Bke, Bki, Bko, Bku;
            ulong Bma, Bme, Bmi, Bmo, Bmu;
            ulong Bsa, Bse, Bsi, Bso, Bsu;
            ulong Ca, Ce, Ci, Co, Cu;
            ulong Da, De, Di, Do, Du;
            ulong Eba, Ebe, Ebi, Ebo, Ebu;
            ulong Ega, Ege, Egi, Ego, Egu;
            ulong Eka, Eke, Eki, Eko, Eku;
            ulong Ema, Eme, Emi, Emo, Emu;
            ulong Esa, Ese, Esi, Eso, Esu;

            ulong c_0 = 0x0000000000000001;
            ulong c_1 = 0x0000000000008082;
            ulong c_2 = 0x800000000000808a;
            ulong c_3 = 0x8000000080008000;
            ulong c_4 = 0x000000000000808b;
            ulong c_5 = 0x0000000080000001;
            ulong c_6 = 0x8000000080008081;
            ulong c_7 = 0x8000000000008009;
            ulong c_8 = 0x000000000000008a;
            ulong c_9 = 0x0000000000000088;
            ulong c_10 = 0x0000000080008009;
            ulong c_11 = 0x000000008000000a;
            ulong c_12 = 0x000000008000808b;
            ulong c_13 = 0x800000000000008b;
            ulong c_14 = 0x8000000000008089;
            ulong c_15 = 0x8000000000008003;
            ulong c_16 = 0x8000000000008002;
            ulong c_17 = 0x8000000000000080;
            ulong c_18 = 0x000000000000800a;
            ulong c_19 = 0x800000008000000a;
            ulong c_20 = 0x8000000080008081;
            ulong c_21 = 0x8000000000008080;
            ulong c_22 = 0x0000000080000001;
            ulong c_23 = 0x8000000080008008;

            Aba = m_state[0];
            Abe = m_state[1];
            Abi = m_state[2];
            Abo = m_state[3];
            Abu = m_state[4];
            Aga = m_state[5];
            Age = m_state[6];
            Agi = m_state[7];
            Ago = m_state[8];
            Agu = m_state[9];
            Aka = m_state[10];
            Ake = m_state[11];
            Aki = m_state[12];
            Ako = m_state[13];
            Aku = m_state[14];
            Ama = m_state[15];
            Ame = m_state[16];
            Ami = m_state[17];
            Amo = m_state[18];
            Amu = m_state[19];
            Asa = m_state[20];
            Ase = m_state[21];
            Asi = m_state[22];
            Aso = m_state[23];
            Asu = m_state[24];

            Ca = Aba^Aga^Aka^Ama^Asa;
            Ce = Abe^Age^Ake^Ame^Ase;
            Ci = Abi^Agi^Aki^Ami^Asi;
            Co = Abo^Ago^Ako^Amo^Aso;
            Cu = Abu^Agu^Aku^Amu^Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_0;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_1;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_2;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_3;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_4;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_5;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_6;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_7;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_8;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_9;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_10;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_11;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_12;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_13;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_14;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_15;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_16;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_17;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_18;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_19;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_20;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_21;
            Ca = Aba;
            Abe = Bbe ^ (~Bbi | Bbo);
            Ce = Abe;
            Abi = Bbi ^ (Bbo & Bbu);
            Ci = Abi;
            Abo = Bbo ^ (Bbu | Bba);
            Co = Abo;
            Abu = Bbu ^ (Bba & Bbe);
            Cu = Abu;
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Ca ^= Aga;
            Age = Bge ^ (Bgi & Bgo);
            Ce ^= Age;
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Agi;
            Ago = Bgo ^ (Bgu | Bga);
            Co ^= Ago;
            Agu = Bgu ^ (Bga & Bge);
            Cu ^= Agu;
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ca ^= Aka;
            Ake = Bke ^ (Bki & Bko);
            Ce ^= Ake;
            Aki = Bki ^ (~Bko & Bku);
            Ci ^= Aki;
            Ako = (~Bko) ^ (Bku | Bka);
            Co ^= Ako;
            Aku = Bku ^ (Bka & Bke);
            Cu ^= Aku;
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ca ^= Ama;
            Ame = Bme ^ (Bmi | Bmo);
            Ce ^= Ame;
            Ami = Bmi ^ (~Bmo | Bmu);
            Ci ^= Ami;
            Amo = ~Bmo ^ (Bmu & Bma);
            Co ^= Amo;
            Amu = Bmu ^ (Bma | Bme);
            Cu ^= Amu;
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ca ^= Asa;
            Ase = ~Bse ^ (Bsi | Bso);
            Ce ^= Ase;
            Asi = Bsi ^ (Bso & Bsu);
            Ci ^= Asi;
            Aso = Bso ^ (Bsu | Bsa);
            Co ^= Aso;
            Asu = Bsu ^ (Bsa & Bse);
            Cu ^= Asu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Aba ^= Da;
            Bba = Aba;
            Age ^= De;
            Bbe = (Age << 44) ^ (Age >> (64 - 44));
            Aki ^= Di;
            Bbi = (Aki << 43) ^ (Aki >> (64 - 43));
            Amo ^= Do;
            Bbo = (Amo << 21) ^ (Amo >> (64 - 21));
            Asu ^= Du;
            Bbu = (Asu << 14) ^ (Asu >> (64 - 14));
            Eba = Bba ^ (Bbe | Bbi);
            Eba ^= c_22;
            Ca = Eba;
            Ebe = Bbe ^ (~Bbi | Bbo);
            Ce = Ebe;
            Ebi = Bbi ^ (Bbo & Bbu);
            Ci = Ebi;
            Ebo = Bbo ^ (Bbu | Bba);
            Co = Ebo;
            Ebu = Bbu ^ (Bba & Bbe);
            Cu = Ebu;
            Abo ^= Do;
            Bga = (Abo << 28) ^ (Abo >> (64 - 28));
            Agu ^= Du;
            Bge = (Agu << 20) ^ (Agu >> (64 - 20));
            Aka ^= Da;
            Bgi = (Aka << 3) ^ (Aka >> (64 - 3));
            Ame ^= De;
            Bgo = (Ame << 45) ^ (Ame >> (64 - 45));
            Asi ^= Di;
            Bgu = (Asi << 61) ^ (Asi >> (64 - 61));
            Ega = Bga ^ (Bge | Bgi);
            Ca ^= Ega;
            Ege = Bge ^ (Bgi & Bgo);
            Ce ^= Ege;
            Egi = Bgi ^ (Bgo | ~Bgu);
            Ci ^= Egi;
            Ego = Bgo ^ (Bgu | Bga);
            Co ^= Ego;
            Egu = Bgu ^ (Bga & Bge);
            Cu ^= Egu;
            Abe ^= De;
            Bka = (Abe << 1) ^ (Abe >> (64 - 1));
            Agi ^= Di;
            Bke = (Agi << 6) ^ (Agi >> (64 - 6));
            Ako ^= Do;
            Bki = (Ako << 25) ^ (Ako >> (64 - 25));
            Amu ^= Du;
            Bko = (Amu << 8) ^ (Amu >> (64 - 8));
            Asa ^= Da;
            Bku = (Asa << 18) ^ (Asa >> (64 - 18));
            Eka = Bka ^ (Bke | Bki);
            Ca ^= Eka;
            Eke = Bke ^ (Bki & Bko);
            Ce ^= Eke;
            Eki = Bki ^ (~Bko & Bku);
            Ci ^= Eki;
            Eko = (~Bko) ^ (Bku | Bka);
            Co ^= Eko;
            Eku = Bku ^ (Bka & Bke);
            Cu ^= Eku;
            Abu ^= Du;
            Bma = (Abu << 27) ^ (Abu >> (64 - 27));
            Aga ^= Da;
            Bme = (Aga << 36) ^ (Aga >> (64 - 36));
            Ake ^= De;
            Bmi = (Ake << 10) ^ (Ake >> (64 - 10));
            Ami ^= Di;
            Bmo = (Ami << 15) ^ (Ami >> (64 - 15));
            Aso ^= Do;
            Bmu = (Aso << 56) ^ (Aso >> (64 - 56));
            Ema = Bma ^ (Bme & Bmi);
            Ca ^= Ema;
            Eme = Bme ^ (Bmi | Bmo);
            Ce ^= Eme;
            Emi = Bmi ^ (~Bmo | Bmu);
            Ci ^= Emi;
            Emo = ~Bmo ^ (Bmu & Bma);
            Co ^= Emo;
            Emu = Bmu ^ (Bma | Bme);
            Cu ^= Emu;
            Abi ^= Di;
            Bsa = (Abi << 62) ^ (Abi >> (64 - 62));
            Ago ^= Do;
            Bse = (Ago << 55) ^ (Ago >> (64 - 55));
            Aku ^= Du;
            Bsi = (Aku << 39) ^ (Aku >> (64 - 39));
            Ama ^= Da;
            Bso = (Ama << 41) ^ (Ama >> (64 - 41));
            Ase ^= De;
            Bsu = (Ase << 2) ^ (Ase >> (64 - 2));
            Esa = Bsa ^ (~Bse & Bsi);
            Ca ^= Esa;
            Ese = ~Bse ^ (Bsi | Bso);
            Ce ^= Ese;
            Esi = Bsi ^ (Bso & Bsu);
            Ci ^= Esi;
            Eso = Bso ^ (Bsu | Bsa);
            Co ^= Eso;
            Esu = Bsu ^ (Bsa & Bse);
            Cu ^= Esu;
            Da = Cu ^ (Ce << 1) ^ (Ce >> (64 - 1));
            De = Ca ^ (Ci << 1) ^ (Ci >> (64 - 1));
            Di = Ce ^ (Co << 1) ^ (Co >> (64 - 1));
            Do = Ci ^ (Cu << 1) ^ (Cu >> (64 - 1));
            Du = Co ^ (Ca << 1) ^ (Ca >> (64 - 1));
            Eba ^= Da;
            Bba = Eba;
            Ege ^= De;
            Bbe = (Ege << 44) ^ (Ege >> (64 - 44));
            Eki ^= Di;
            Bbi = (Eki << 43) ^ (Eki >> (64 - 43));
            Emo ^= Do;
            Bbo = (Emo << 21) ^ (Emo >> (64 - 21));
            Esu ^= Du;
            Bbu = (Esu << 14) ^ (Esu >> (64 - 14));
            Aba = Bba ^ (Bbe | Bbi);
            Aba ^= c_23;
            Abe = Bbe ^ (~Bbi | Bbo);
            Abi = Bbi ^ (Bbo & Bbu);
            Abo = Bbo ^ (Bbu | Bba);
            Abu = Bbu ^ (Bba & Bbe);
            Ebo ^= Do;
            Bga = (Ebo << 28) ^ (Ebo >> (64 - 28));
            Egu ^= Du;
            Bge = (Egu << 20) ^ (Egu >> (64 - 20));
            Eka ^= Da;
            Bgi = (Eka << 3) ^ (Eka >> (64 - 3));
            Eme ^= De;
            Bgo = (Eme << 45) ^ (Eme >> (64 - 45));
            Esi ^= Di;
            Bgu = (Esi << 61) ^ (Esi >> (64 - 61));
            Aga = Bga ^ (Bge | Bgi);
            Age = Bge ^ (Bgi & Bgo);
            Agi = Bgi ^ (Bgo | ~Bgu);
            Ago = Bgo ^ (Bgu | Bga);
            Agu = Bgu ^ (Bga & Bge);
            Ebe ^= De;
            Bka = (Ebe << 1) ^ (Ebe >> (64 - 1));
            Egi ^= Di;
            Bke = (Egi << 6) ^ (Egi >> (64 - 6));
            Eko ^= Do;
            Bki = (Eko << 25) ^ (Eko >> (64 - 25));
            Emu ^= Du;
            Bko = (Emu << 8) ^ (Emu >> (64 - 8));
            Esa ^= Da;
            Bku = (Esa << 18) ^ (Esa >> (64 - 18));
            Aka = Bka ^ (Bke | Bki);
            Ake = Bke ^ (Bki & Bko);
            Aki = Bki ^ (~Bko & Bku);
            Ako = ~Bko ^ (Bku | Bka);
            Aku = Bku ^ (Bka & Bke);
            Ebu ^= Du;
            Bma = (Ebu << 27) ^ (Ebu >> (64 - 27));
            Ega ^= Da;
            Bme = (Ega << 36) ^ (Ega >> (64 - 36));
            Eke ^= De;
            Bmi = (Eke << 10) ^ (Eke >> (64 - 10));
            Emi ^= Di;
            Bmo = (Emi << 15) ^ (Emi >> (64 - 15));
            Eso ^= Do;
            Bmu = (Eso << 56) ^ (Eso >> (64 - 56));
            Ama = Bma ^ (Bme & Bmi);
            Ame = Bme ^ (Bmi | Bmo);
            Ami = Bmi ^ (~Bmo | Bmu);
            Amo = ~Bmo ^ (Bmu & Bma);
            Amu = Bmu ^ (Bma | Bme);
            Ebi ^= Di;
            Bsa = (Ebi << 62) ^ (Ebi >> (64 - 62));
            Ego ^= Do;
            Bse = (Ego << 55) ^ (Ego >> (64 - 55));
            Eku ^= Du;
            Bsi = (Eku << 39) ^ (Eku >> (64 - 39));
            Ema ^= Da;
            Bso = (Ema << 41) ^ (Ema >> (64 - 41));
            Ese ^= De;
            Bsu = (Ese << 2) ^ (Ese >> (64 - 2));
            Asa = Bsa ^ (~Bse & Bsi);
            Ase = ~Bse ^ (Bsi | Bso);
            Asi = Bsi ^ (Bso & Bsu);
            Aso = Bso ^ (Bsu | Bsa);
            Asu = Bsu ^ (Bsa & Bse);

            m_state[0] = Aba;
            m_state[1] = Abe;
            m_state[2] = Abi;
            m_state[3] = Abo;
            m_state[4] = Abu;
            m_state[5] = Aga;
            m_state[6] = Age;
            m_state[7] = Agi;
            m_state[8] = Ago;
            m_state[9] = Agu;
            m_state[10] = Aka;
            m_state[11] = Ake;
            m_state[12] = Aki;
            m_state[13] = Ako;
            m_state[14] = Aku;
            m_state[15] = Ama;
            m_state[16] = Ame;
            m_state[17] = Ami;
            m_state[18] = Amo;
            m_state[19] = Amu;
            m_state[20] = Asa;
            m_state[21] = Ase;
            m_state[22] = Asi;
            m_state[23] = Aso;
            m_state[24] = Asu;
        }

        protected override void Finish()
        {
            int buffer_pos = m_buffer.Pos;
            byte[] block = m_buffer.GetBytesZeroPadded();
            block[buffer_pos] = 1;
            block[BlockSize - 1] |= 128;

            TransformBlock(block, 0);

            m_state[1] = ~m_state[1];
            m_state[2] = ~m_state[2];
            m_state[8] = ~m_state[8];
            m_state[12] = ~m_state[12];
            m_state[17] = ~m_state[17];
        }

        protected override byte[] GetResult()
        {
            return Converters.ConvertULongsToBytes(m_state).SubArray(0, HashSize);
        }

        public override void Initialize()
        {
            Array.Clear(m_state, 0, 25);

            m_state[1] = UInt64.MaxValue;
            m_state[2] = UInt64.MaxValue;
            m_state[8] = UInt64.MaxValue;
            m_state[12] = UInt64.MaxValue;
            m_state[17] = UInt64.MaxValue;
            m_state[20] = UInt64.MaxValue;

            base.Initialize();
        }
    };

}